Skip to main content

Llamar a una función externa

Este mecanismo se puede utilizar para llamar a una función externa en una aplicación IEC a través de un socket de dominio Unix. Esto le permite crear sus propias funcionalidades. Al mismo tiempo, se logra la separación del proceso. Como interfaz en IEC, el EXTAPI.UDSExternalFunction bloque de funciones se proporciona en el ExtensionAPI biblioteca. En Python, el ExternalFunctionBase La clase se utiliza para este propósito, que se proporciona en el ejemplo proporcionado.

Este ejemplo también explica cómo utilizar el mecanismo. El ejemplo contiene un proyecto IEC con llamada implementada de una función externa. Además, el ejemplo contiene la implementación de la función llamada myExternalFunction en Python.

Una vez CODESYS Control Extension Package instalado, puede encontrar el UDSExternalCallExample.project ejemplo y el script uds_external_function.py de Python en el siguiente directorio: C:\Program Files\CODESYS <version>\CODESYS\CODESYS Control SL Extension Package\<version>\Examples\ExternalCall.

Ejemplo, aplicación IEC

En el UDSExternalCallExample.project proyecto de muestra, un nuevo myExternalFunction se crea el bloque de funciones. Esto amplía el EXTAPI.UDSExternalFunction FB con entradas y salidas de tipo DINT.También son posibles otros tipos de datos. Al principio, se debe pasar el nombre de la función a llamar en Python. Esta dirección debe ser única.

El siguiente código se utiliza para agregar las entradas de la función externa de la interfaz:

Result := THIS^.AddParameter('parameterIn1', 'DINT', TO_STRING(diIn1));

Luego se usa el siguiente código para llamar a la función externa:

Result := THIS^.Call();

El siguiente código se utiliza para consultar el valor de retorno de la función implementada en Python:

Result := THIS^.GetParameter('parameterOut', 'DINT', ADR(sValue));

Los parámetros son de tipo string. En consecuencia, tiene que ser convertido al tipo de datos deseado.

Ejemplo, secuencia de comandos de Python

Importante

Los ejemplos de Python proporcionados para la API de extensión requieren Python 3.0.

el incluido uds_external_function.py muestra proporciona la ExternalFunctionBase clase, que proporciona comunicación de Unix Domain Socket con el sistema de tiempo de ejecución para esta funcionalidad.

El myExternalFunction La clase implementada en el ejemplo extiende el ExternalFunctionBase clase.La Call() es necesaria la función, que se llama desde el mecanismo de IEC. Los parámetros de entrada y salida se pasan en forma de tuplas de cadenas.

Ejemplo: {'parameterIn1': ('DINT', '11'), 'parameterIn2': ('DINT', '22')}

En el ejemplo, el Call()La función implementa una simple adición de los dos parámetros de entrada:

def Call(self, dictParams):
    in1 = int(dictParams['parameterIn1'][1])
    in2 = int(dictParams['parameterIn2'][1])

    dictRetParams = {}
    dictRetParams['parameterOut'] = 'DINT', in1 + in2

    return dictRetParams
  1. Copie el script uds_external_function.py (ubicado en el directorio C:\Program Files\CODESYS <version>\CODESYS\CODESYS Control SL Extension Package\<version>\Examples\ExternalCall una vez instalado el CODESYS Control Extension Package) en el dispositivo de destino.

  2. Ejecutar el script uds_external_function.py.

  3. Entonces comienza el UDSExternalCallExample.project proyecto de muestra en CODESYS.

    Puede ver que el proyecto llama al myExternalFunction() función del script de Python y se suman los dos parámetros de entrada.

Uso de la interfaz solo como miembro de Linux codesysuser grupo de usuario

Separación de procesos